import {HOME_PATH} from "@/common/consts";
import store from "@/store";

// 定义user info对象
const IUserInfo = {
    openid: '',
    nickname: '',
    avatar: '',
    token: ''
}

export default {
    state: {
        // 用户信息
        user_info: IUserInfo,
    },
    getters: {
        // 获取用户信息
        getUserInfo(state) {
            // 如果不存在则尝试从本地缓存中加载
            if (!state.user_info.openid) {
                let cache = uni.getStorageSync('authedUserInfo') || IUserInfo
                // 设置用户信息
                store.commit('setUserInfo', cache)
                return cache
            }
            return state.user_info
        },
        // 是否已登录
        isLogin(state, getters) {
            const user_info = getters.getUserInfo
            return !!user_info.token;
        }
    },
    mutations: {
        // 设置用户信息
        setUserInfo(state, userInfo) {
            // 如果userInfo === null，则清空缓存
            if (userInfo === null) {
                state.user_info = IUserInfo
                uni.removeStorageSync('authedUserInfo')
            } else {
                state.user_info = userInfo
                uni.setStorageSync('authedUserInfo', userInfo)
            }
        },
    },
    actions: {
        // 用户登录操作
        async userLogin(context, params) {
            uni.login({
                provider: 'weixin', //使用微信登录
                success: (res) => {
                    uni.$u.http.post('/wxc/sharer-mp/v1/auth/login', {code: res.code}).then(res => {
                        context.commit('setUserInfo', res)
                        // 返回上一页，如果失败则返回首页
                        uni.navigateBack({
                            fail: () => {
                                uni.switchTab({
                                    url: HOME_PATH
                                })
                            }
                        })
                    })
                },
                fail: function (err) {
                    console.log("微信登录失败：", err)
                    // 抛出异常
                    throw err
                }
            })
        }
    }
}